#include "main.h"

// 初始化队列。初始化成功返回0；初始化失败返回1。
int init_queue(Queue** q) {
	*q = (Queue*)malloc(sizeof(Queue));
	if (*q == NULL) {
		return 1;
	}
	(*q)->size = 0;
	return 0;
}

// 在队列q的尾巴上增加一个元素，其值为value。增加成功，返回0；增加失败，返回1
int enqueue(Queue* q, int value) {
	if (q->size >= QUEUE_MAX_SIZE) {
		return 1;
	}
	q->elements[q->size] = value;
	q->size++;
	return 0;
}

// 从队列q上摘取（去掉）一个元素，将其值放入value中。摘取成功，返回0；摘取失败，返回1。
int dequeue(Queue* q, int* value) {
	if (q->size == 0 || q->size >= QUEUE_MAX_SIZE) {
		return 1;
	}
	*value = q->elements[0];
	for (int i = 0; i < q->size; i++) {
		q->elements[i - 1] = q->elements[i];
	}
	q->size--;
	return 0;
}

// 获取队列q的第一个元素，但是并不去掉该元素，并将该值放入value中。获取成功返回0；获取失败，返回1。 
int first(Queue* q, int* value) {
	if (q->size == 0 || q->size == QUEUE_MAX_SIZE) {
		return 1;
	}
	
	*value = q->elements[0];
	return 0;
}

// 判断队列q是否为空。为空，返回0；不为空，返回1。 
int is_empty(Queue* q) {
	if (q->size == 0) {
		return 0;
	}
	return 1;
	
}

// 返回队列q中的元素个数。 
int size(Queue* q) {
	return q->size;
}
